package j2024.j202410;

import java.util.ArrayList;

public class j1012 {
    /**
     * 57. 插入区间
     * 给你一个 无重叠的 ，按照区间起始端点排序的区间列表 intervals，
     * 其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束，并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。
     *
     * 在 intervals 中插入区间 newInterval，
     * 使得 intervals 依然按照 starti 升序排列，且区间之间不重叠（如果有必要的话，可以合并区间）。
     *
     * 返回插入之后的 intervals。
     *
     * 注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。
     * @param intervals
     * @param newInterval
     * @return
     */
    public int[][] insert(int[][] intervals, int[] newInterval) {
        int m = intervals.length;
        int left = newInterval[0],right = newInterval[1];
        ArrayList<int[]> ret = new ArrayList<>();
        boolean is = false;
        for (int i = 0; i < m; i++) {
            int l = intervals[i][0],r = intervals[i][1];
            if(r<left){//在new左边,直接加
                ret.add(new int[]{l,r});
            }else if(l>right){//在new右边,判断new片段是否加了,没加就加上第一次
                if(!is){
                    ret.add(new int[]{left,right});
                    is = true;
                }
                ret.add(new int[]{l,r});
            }else {//找出和new重复的片段
                left = Math.min(left,l);
                right = Math.max(right,r);
            }
        }
        if(!is){
            ret.add(new int[]{left,right});
        }
        int[][] rett = new int[ret.size()][2];
        for (int i = 0; i < ret.size(); i++) {
            rett[i] = ret.get(i);
        }
        return rett;
    }
}
